#ifndef TESTCORDALIDAD_INCLUDED
#define TESTCORDALIDAD_INCLUDED

#include "grafo.h"
#include <list>
#include <vector>

using namespace std;

class TestCordalidad {
  public:
  TestCordalidad(Grafo &g, vector<int> &orden, bool cografo);
  ~TestCordalidad();
  bool test();

  list<int>* hijos;
  list<int>* rns;

  list<int> co_padres(vector<int> &orden);

  private:
  // Construcci'on:
  void crearOrdenNodos(vector<int> &orden);
  void setearHijos();
  void co_setearHijos(vector<int> &orden);
  void crearRNs();
  list<int> crearRN(int nodo);
  int padre(int nodo);
  int co_padre(int nodo, vector<int> &orden);
  void crearHijosVacio();
  void crearChequeadorDeInclusiones();


  // Testeo de cordalidad:
  void cambiarChequeadorDeVecinos(list<int> &nodos);
  bool tieneHijos(int padre);
  bool chequearInclusiones(int padre);
  bool chequearInclusionesDeTodosLosHijos(int rnPadre);
  bool chequearIncluidos(int padre, list<int> rn);

  // Debug:
  void mostrarRNs();

  // Miembros:
  Grafo grafo;
  unsigned int cantNodos;
  int* ordenNodos;
  bool* chequeadorDeInclusiones;
  bool coTest;

};

#endif // TESTCORDALIDAD_INCLUDED
